import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'

// 创建axios实例
const http = axios.create({
  baseURL: '', // 基础URL为空，因为后端已经提供了'/api'路径前缀
  timeout: 10000 // 请求超时时间
})

// 添加请求拦截器
http.interceptors.request.use(
  config => {
    console.log('API请求拦截 - 发送请求:', {
      url: config.url,
      方法: config.method,
      头信息: config.headers,
      数据: config.data || config.params
    });
    
    // 从localStorage中获取token并添加到请求头
    const token = localStorage.getItem('token')
    if (token) {
      // 详细记录Token信息
      const tokenData = token.length > 40 ? `${token.substring(0, 20)}...${token.substring(token.length - 20)}` : token;
      console.log('API请求拦截 - 认证Token:', tokenData);
      config.headers['Authorization'] = `Bearer ${token}`
    } else {
      console.warn('API请求拦截 - 未找到认证Token');
    }
    return config
  },
  error => {
    console.error('API请求拦截 - 请求错误:', error);
    return Promise.reject(error)
  }
)

// 响应拦截器
http.interceptors.response.use(
  response => {
    console.log('API响应拦截 - 响应成功:', {
      URL: response.config.url,
      状态码: response.status,
      数据类型: typeof response.data,
      数据长度: Array.isArray(response.data) ? response.data.length : '非数组'
    });
    return response.data
  },
  error => {
    // 详细记录错误信息
    const errorData = {
      消息: error.message,
      URL: error.config?.url,
      状态码: error.response?.status,
      响应数据: error.response?.data
    };
    
    console.error('API响应拦截 - 响应错误:', errorData);
    
    if (!error.response) {
      ElMessage.error('网络错误，请检查您的网络连接')
      return Promise.reject(error)
    }
    
    const status = error.response.status
    const currentPath = router.currentRoute.value.path
    const requestUrl = error.config?.url || ''
    
    if (status === 401) {
      // 清除本地token
      localStorage.removeItem('token')
      
      // 判断是否是登录请求
      const isLoginRequest = requestUrl.includes('/api/auth/login')
      
      // 只有在非登录页面且非登录请求时才显示过期提示
      if (currentPath !== '/login' && !isLoginRequest) {
        ElMessage({
          message: '您的登录已失效，请重新登录',
          type: 'warning',
          duration: 3000
        })
        // 跳转到登录页
        router.push('/login')
      }
    } else if (status === 403) {
      ElMessage.error('没有权限访问该资源')
    } else if (status === 404) {
      ElMessage.error('请求的资源不存在')
    } else if (status === 500) {
      ElMessage.error('服务器内部错误')
    } else {
      // 处理其他错误
      const message = error.response.data?.message || '未知错误'
      ElMessage.error(message)
    }
    
    return Promise.reject(error)
  }
)

export default http 